//
//  Cliente.m
//  ProyectoMoviTiendas
//
//  Created by Daniel Paez on 3/6/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "Cliente.h"
#import "Carrito.h"
#import "Barrio.h"

@implementation Cliente

@synthesize nombre, direccion1,carritos, favoritas, historial, listas, barrio;

//Inicializa un cliente con un nombre, una dirección principal y una dirección alterna dadas.
//Sirve para registrar clientes nuevos
- (id)initConNombre: (NSString *) nombre
       conDireccion: (NSString *) dir1
          conBarrio: (Barrio *) barrio
{
    self = [self init];
    self.carritos = [[NSMutableArray alloc] init];
    self.favoritas = [[Barrio alloc] initConNombre:@"Favoritas"];
    self.listas = [[NSMutableArray alloc] init];
    self.historial = [[NSMutableArray alloc] init];
    self.nombre = nombre;
    self.direccion1=dir1; 
    self.barrio = barrio;
    return self;
}

//Inicializa un cliente con un nombre, una dirección principal dadas.
//Sirve para cargar clientes creados previamente.
- (id)initConNombre: (NSString *) nombre
       conDireccion: (NSString *) dir1
 conCarritosActules: (NSMutableArray *) carritos
       conHistorial: (NSMutableArray *) historial
conTiendasFavoritas: (NSMutableArray *) favoritas
          conListas: (NSMutableArray *)listas
          conBarrio: (Barrio *) barrio
{
    self = [self init];
    self.carritos = carritos;
    self.favoritas = [[Barrio alloc] initConNombre:@"Favoritas" conTiendas:favoritas];
    self.historial = historial;
    self.nombre = nombre;
    self.direccion1=dir1;
    self.listas=listas;   
    self.barrio = barrio;        
    return self;
}

//Agregar tienda ingresada como parámentro a favoritas
- (void)agregarTiendaFavorita: (Tienda *) tienda
{
    [favoritas agregarTienda:tienda];
}

//Busca tienda ingresada como parámetro en favoritas. Si la tienda ya existe, retorna YES, en caso contrario retorna NO.
- (BOOL)buscarTiendaEnFavoritas: (Tienda *) nTienda
{
    BOOL existe=false;
    for (Tienda *tienda in favoritas.tiendas)
    {
        if([nTienda.nombre isEqualToString:tienda.nombre])
        {
            existe=true;
        }
    }
    return existe;
}

//Agregar item ingresado como parámetro al carrito correspondiente
- (void)agregarItemACarrito: (Item *) item
{
    NSString *nTienda = item.tienda.nombre;
    BOOL existe=NO;
    
    //Recorre los carritos de historial para ver si la tienda a la que pertenece el item ya tiene un carrito
    for (int i=0; i<[carritos count] && !existe; i++) 
    {
        Carrito *carrito = [carritos objectAtIndex:i];
           
        if([carrito.tienda.nombre isEqualToString: nTienda])
        {
            existe=YES;
            [carrito agregarItemACarrito:item];
           
            
        }
    }
    
    if (!existe)
    {
        Carrito *c = [[Carrito alloc] init];
        c.tienda = item.tienda;
        [c agregarItemACarrito:item];
        [carritos addObject:c];        
    } 
}

//Agregar lista ingresada como parámentro a listas
- (void)agregarLista: (Lista *) lista
{
    [listas addObject:lista];
}

-(void) eliminarItemDeCarrito:(Item *)item
{
    NSString *nTienda = item.tienda.nombre;
    BOOL existe=NO;
    
    //Recorre los carritos de historial para ver si la tienda a la que pertenece el item ya tiene un carrito
    for (int i=0; i<[carritos count] && !existe; i++) 
    {
        Carrito *carrito = [carritos objectAtIndex:i];
        
        if([carrito.tienda.nombre isEqualToString: nTienda])
        {
            existe=YES;
            [carrito eliminarItemDelCarrito:item];
            
            if(![carrito.items count])
            {
                [carritos removeObjectAtIndex:i];
            }
            
        }
    }
}

- (void) solictarDomicilio:(Carrito *) carrito conFecha:(NSDate *) fecha
{
    BOOL encontro = NO;
    
    for (int i = 0; i < [carritos count] && !encontro; i++) 
    {
        Carrito *temp = [carritos objectAtIndex:i];
        if([temp.tienda.nombre isEqualToString:carrito.tienda.nombre])
        {
            encontro = YES;
            [carritos removeObjectAtIndex:i];
            carrito.fecha = fecha;
            [historial addObject:carrito];
            
        }
    }
    
}

- (void) encodeWithCoder:(NSCoder*) coder
{
    [coder encodeObject:[self carritos] forKey:@"carritos"];
    [coder encodeObject:[self favoritas] forKey:@"favoritas"];
    [coder encodeObject:[self listas] forKey:@"listas"];
    [coder encodeObject:[self historial] forKey:@"historial"];
    [coder encodeObject:[self nombre] forKey:@"nombre"];
    [coder encodeObject:[self direccion1] forKey:@"direccion1"];
    [coder encodeObject:[self barrio] forKey:@"barrio"];
    //    [coder encodeFloat:[self strokeWidth] forKey:@"stroke_width"];
}


- (id) initWithCoder:(NSCoder*) coder
{
    //[self init];
        self = [super init];
    [self setCarritos:[coder decodeObjectForKey:@"carritos"]];
    [self setFavoritas:[coder decodeObjectForKey:@"favoritas"]];
    [self setListas:[coder decodeObjectForKey:@"listas"]];
    [self setHistorial:[coder decodeObjectForKey:@"historial"]];
    [self setNombre:[coder decodeObjectForKey:@"nombre"]];
    [self setDireccion1:[coder decodeObjectForKey:@"direccion1"]];
    [self setBarrio:[coder decodeObjectForKey:@"barrio"]];
    //[self setStrokeWidth:[coder decodeFloatForKey:@"stroke_width"]];
    
    return self;
}


@end
